package com.sg.java;

import cn.hutool.core.util.IdUtil;
import com.sg.java.constant.VoltConstant;
import com.sg.java.entity.VoltageQualifiedVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;

/**
 * date: 2022/7/8 下午 3:06
 *
 * @author LIKEGAKKI
 * Description: 用户维度
 */

public class HYDataComputeStrategy {
    private static final Logger LOG = LoggerFactory
            .getLogger(HYDataComputeStrategy.class);

    private static final String HY_TYPE = VoltConstant.SbTypeEnum.YH.getType().toString();
    private static final String HY_LEVEL = VoltConstant.SbLevelEnum.YH.getType();


    public static boolean isHY(VoltageQualifiedVo vo) {
        return HY_TYPE.equals(vo.getDeviceType()) && HY_LEVEL.equals(vo.getDeviceLevel());
    }


    public void excute(VoltageQualifiedVo vo) {

        if (!HYDataComputeStrategy.isHY(vo)) {

        }

        // 主键
        Long id = IdUtil.getSnowflakeNextId();

        // 创建时间
        Date dateTime = vo.getDateTime();

        // 用户唯一标识
        String mpCode = vo.getSbId();

        // 统计日期
        // userRecord.addColumn(new DateColumn(date));

        // 所属监测设备id
        String deviceId = vo.getId();

        //监测总时间
        Double monitorTime = vo.getMonitorTime();

        // 电压最大值
        Double uMaxValue = vo.getMaxValue();


        // 电压最大值发生时刻
        Date uMaxValueDate = vo.getMaxValueTime();


        // 电压最小值
        Double uMinValue = vo.getMinValue();


        // 电压最小值发生时刻
        Date uMinValueDate = vo.getMinValueTime();


        // 电压平均值
        Double avg = vo.getAvg();

        // 电压越上时间
        double upTime = vo.getUpTime();
        // 电压越上限率
        double upRate = (upTime / monitorTime) * 100;
        // 电压越下时间
        double lowerTime = vo.getDownTime();
        // 电压越下限率
        double lowerRate = (lowerTime / monitorTime) * 100;

        // 合格时长 = 1440 -(电压越上时间 + 电压越下时间）
        double qualifiedTime = 1440 - (upTime + lowerTime);

        // 合格率
        double qualifiedRate = (1 - ((upTime + lowerTime) / monitorTime)) * 100;

        // 用户名称
        String userName = vo.getSbName();

        // 有效数据时间
        Double validDataTime = vo.getValidDataTime();

        // 有效数据率  = (有效数据时间 / 1440) * 100
        double validDataRate = (validDataTime / 1440) * 100;


        // 电压等级
        Integer voltageLevel = vo.getVoltageLevel();

        // 所属单位名称
        String areaName = vo.getOrgName();


    }


}
